#include "dominion.h"
#include "dominion_helpers.h"
#include <string.h>
#include <stdio.h>
#include <assert.h>




#include "rngs.h"

#define DEBUG 0
#define NOISY_TEST 1

int check_updateCoins(int p, struct gameState *post, int bonus) {
  // struct gameState pre;
  // memcpy (&pre, post, sizeof(struct gameState));

  int r;
  // r = drawCard (p, post);
  
  if(p == 0){
	  switch(bonus){
		case 0:
			r = updateCoins(p, post, bonus);
			break;
		case 1:
			r = updateCoins(p, post, bonus);
			break;
		case 2:
			r = updateCoins(p, post, bonus);
			break;
		case 3:
			r = updateCoins(p, post, bonus);
			break;
		default:
			break;
	  }
	}else if(p == 1){ 
		switch(bonus){
			case 0:
				r = updateCoins(p, post, bonus);
				break;
			case 1:
				r = updateCoins(p, post, bonus);
				break;
			case 2:
				r = updateCoins(p, post, bonus);
				break;
			case 3:
				r = updateCoins(p, post, bonus);
				break;
			default:
				break;
			} 
	}
	
	// r = updateCoins(p, post, bonus);
  
  
  
  
  
/*  
  if (pre.deckCount[p] > 0) {
    pre.handCount[p]++;
    pre.hand[p][pre.handCount[p]-1] = pre.deck[p][pre.deckCount[p]-1];
    pre.deckCount[p]--;
  } else if (pre.discardCount[p] > 0) {
    memcpy(pre.deck[p], post->deck[p], sizeof(int) * pre.discardCount[p]);
    memcpy(pre.discard[p], post->discard[p], sizeof(int)*pre.discardCount[p]);
    pre.hand[p][post->handCount[p]-1] = post->hand[p][post->handCount[p]-1];
    pre.handCount[p]++;
    pre.deckCount[p] = pre.discardCount[p]-1;
    pre.discardCount[p] = 0;
  }
*/

  assert (r == 0);
  return 0;

  // assert(memcmp(&pre, post, sizeof(struct gameState)) == 0);
}

int main () {

  int i, n, r, p, bonus, deckCount, discardCount, handCount;

  int k[10] = {adventurer, council_room, feast, gardens, mine,
	       remodel, smithy, village, baron, great_hall};

  struct gameState G;

  printf ("Testing updateCoins.\n");

  SelectStream(2);
  PutSeed(3);

  for (n = 0; n < 1000; n++) {
    for (i = 0; i < sizeof(struct gameState); i++) {
      ((char*)&G)[i] = floor(Random() * 256);
    }
	
    p = floor(Random() * 2);
	
    G.deckCount[p] = floor(Random() * MAX_DECK);
    G.discardCount[p] = floor(Random() * MAX_DECK);
    G.handCount[p] = floor(Random() * MAX_HAND);
	
	bonus = floor(Random() * 4);
	
    check_updateCoins(p, &G, bonus);
  }

  printf ("ALL TESTS OK\n");

  exit(0);

  return 0;
}
